
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>


int main()
{
    printf("我的程序要运行了！\n");
    execl("/usr/bin/ls","ls","-l","-a",NULL);
    printf("我的程序运行完毕了\n");


    return 0;
}




//A
//
//// 函数指针类型
//typedef void (*func_t)();
//
//#define NUM 5
//func_t handlers[NUM+1];
//
//// 如下是任务
//void DownLoad()
//{
//    printf("我是一个下载的任务...\n");
//}
//void Flush()
//{
//    printf("我是一个刷新的任务...\n");
//}
//void Log()
//{
//    printf("我是一个记录日志的任务...\n");
//}
//
//
//
//// 注册
//
//void registerHandler(func_t h[], func_t f)
//    
//{
//    int i = 0;
//    for(; i < NUM; i++)
//    {
//        if(h[i] == NULL)break;
//    }
//    if(i == NUM) return;
//    h[i] = f;
//    h[i+1] = NULL;
//}
//
//int main()
//{
//    registerHandler(handlers, DownLoad);
//    registerHandler(handlers, Flush);
//    registerHandler(handlers, Log);
//
//
//    pid_t id = fork();
//    if(id == 0)
//    {
//        //子进程
//        int cnt = 3;
//        while(1)
//        {
//            sleep(3);
//            printf("我是一个子进程, pid : %d, ppid : %d\n", getpid(), getppid());
//            sleep(1);
//            cnt--;
//            //int *p = 0;
//            //*p= 100;
//           // int a = 10;
//           // a /= 0;
//        }
//        exit(10);
//    }
//
//    // 父进程
//    while(1)
//    {
//        int status = 0;
//        pid_t rid = waitpid(id, &status, WNOHANG);
//        if(rid > 0)
//        {
//            printf("wait success, rid: %d, exit code: %d, exit signal: %d\n", rid, (status>>8)&0xFF, status&0x7F) ; // rid
//            break;
//        }
//        else if(rid == 0)
//        {
//            // 函数指针进行回调处理
//            int i = 0;
//            for(; handlers[i]; i++)
//            {
//                handlers[i]();
//            }
//            printf("本轮调用结束，子进程没有退出\n");
//            sleep(1);
//        }
//        else
//        {
//            printf("等待失败\n");
//            break;
//        }
//
//    }
//
//
//
//
//
//
//
//
//
//
//
//    //父进程
//    //1. 子进程退出
//    //2. 子进程没退出呢？？
//    //pid_t rid = wait(NULL);
//    //int status = 0;
//    //pid_t rid = waitpid(id, &status, 0);
//    //if(rid > 0)
//    //{
//    //    if(WIFEXITED(status))
//    //        printf("wait success, rid: %d, exit code: %d, exit signal: %d\n", rid, WEXITSTATUS(status), status&0x7F) ; // rid
//    //    else
//    //        printf("子进程退出异常!\n");
//    //    //printf("wait success, rid: %d, exit code: %d, exit signal: %d\n", rid, (status>>8)&0xFF, status&0x7F) ; // rid
//    //}
//    //else
//    //{
//    //    printf("wait failed: %d: %s\n", errno, strerror(errno));
//    //}
//    return 0;
//}

//#include <stdio.h>
//#include <string.h>
//#include <errno.h>
//#include <stdlib.h>
//#include <unistd.h>
//#include <sys/types.h>
//#include <sys/wait.h>
//
//int main()
//{
//    pid_t id=fork();
//    if(id == 0)
//    {
//        //子进程
//        int cnt = 3;
//        while(cnt)
//        {
//            printf("我是一个子进程，pid:%d,ppid:%d\n",getpid(),getppid());
//            sleep(1);
//
//            int a=10;
//            a/=0;
//            cnt--;
//        }
//        exit(1);
//    }
//
//    //父进程
//    //1.子进程退出
//    //2.子进程没退出呢？？
//    int status=0;
//    pid_t rid =waitpid(-1,&status,0);
//    if(rid > 0)
//    {
//        printf("wait success,rid: %d,exit code:%d,exit signal:%d\n",rid,(status>>8)&0xFF,status&0x7F); //rid
//    }
//    else 
//    {
//        printf("wait failed: %d:%s\n",errno,strerror(errno));
//    }
//
//    return 0;
//}



//int main()
//{
//    printf("hellobit");
//    sleep(2);
//    _exit(34);
//
//
//    return 0;
//}
//



//void func()
//{
//    printf("helloworld\n");
//    exit(40);
//    printf("hello\n");
//}
//
//int main()
//{
//    func();
//    printf("hellfunc");
//
//
//    //int a=10;
//
//    //a/=0;
//
//    //return 89;
//
//
//   // int i=0;
//   // for(;i<200;i++)
//   // {
//   //     printf("%d -> %s\n",i,strerror(i));
//   // }
//
//
//
//    //printf("helloworld\n");
//    
//   // FILE *fp = fopen("log.txt","r");
//   // if(fp==NULL) return errno;
//
//   // //读取
//   // fclose(fp);
//
//    return 0;
//}
